from datetime import datetime
from . import db

class Major(db.Model):
    """专业表"""
    __tablename__ = '专业表'
    
    专业编号 = db.Column(db.String(20), primary_key=True)
    专业名称 = db.Column(db.String(50), nullable=False)
    
    # 关系
    培养方案 = db.relationship('MajorPlan', backref='major', lazy='dynamic')

class Course(db.Model):
    """课程表"""
    __tablename__ = '课程表'
    
    课程编号 = db.Column(db.String(20), primary_key=True)
    课程名称 = db.Column(db.String(100), nullable=False)
    学分 = db.Column(db.Numeric(4,2), nullable=False)
    
    # 关系
    培养方案 = db.relationship('MajorPlan', backref='course', lazy='dynamic')
    授课记录 = db.relationship('Teaching', backref='course', lazy='dynamic')
    课程评价 = db.relationship('CourseRating', backref='course', lazy='dynamic')
    
    def get_average_rating(self):
        """获取课程平均评分"""
        ratings = self.课程评价.all()
        if not ratings:
            return 0
        return sum(r.得分高低_1到10_ for r in ratings) / len(ratings)

class Teacher(db.Model):
    """教师表"""
    __tablename__ = '教师表'
    
    教师编号 = db.Column(db.String(20), primary_key=True)
    教师姓名 = db.Column(db.String(50), nullable=False)
    
    # 关系
    授课记录 = db.relationship('Teaching', backref='teacher', lazy='dynamic')
    课程评价 = db.relationship('CourseRating', backref='teacher', lazy='dynamic')

class MajorPlan(db.Model):
    """专业培养方案表"""
    __tablename__ = '专业培养方案表'
    
    方案编号 = db.Column(db.Integer, primary_key=True)
    专业编号 = db.Column(db.String(20), db.ForeignKey('专业表.专业编号'), nullable=False)
    年级 = db.Column(db.Integer, nullable=False)
    课程编号 = db.Column(db.String(20), db.ForeignKey('课程表.课程编号'), nullable=False)
    
    __table_args__ = (
        db.UniqueConstraint('专业编号', '年级', '课程编号', name='uq_major_grade_course'),
    )

class Teaching(db.Model):
    """授课表"""
    __tablename__ = '授课表'
    
    授课编号 = db.Column(db.Integer, primary_key=True)
    教师编号 = db.Column(db.String(20), db.ForeignKey('教师表.教师编号'), nullable=False)
    课程编号 = db.Column(db.String(20), db.ForeignKey('课程表.课程编号'), nullable=False)
    教室 = db.Column(db.String(50))
    
    __table_args__ = (
        db.UniqueConstraint('教师编号', '课程编号', name='uq_teacher_course'),
    )

class CourseRating(db.Model):
    """课程评价表"""
    __tablename__ = '课程评价表'
    
    评价编号 = db.Column(db.Integer, primary_key=True)
    课程编号 = db.Column(db.String(20), db.ForeignKey('课程表.课程编号'), nullable=False)
    教师编号 = db.Column(db.String(20), db.ForeignKey('教师表.教师编号'), nullable=False)
    得分高低_1到10_ = db.Column('得分高低(1到10)', db.Integer)  # 1-10分
    水课程度_1到10_ = db.Column('水课程度(1到10)', db.Integer)  # 1-10分 